package com.aop.aspect;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

/**
 * @author wzm
 * @create 2023-10-16 16:04
 * project_name:javaweb2308
 */
@Component
//@Aspect
@Slf4j
public class PointCutTest01 {
    //完整包含所有的部门 delte(Integer id)
    //@Pointcut("execution(public void com.aop.service.impl.DeptServiceImpl.delete(java.lang.Integer))")

    //可以省略访问修饰符
    //@Pointcut("execution(void com.aop.service.impl.DeptServiceImpl.delete(java.lang.Integer))")

    //使用*代替任何类型的返回值
    //@Pointcut("execution(* com.aop.service.impl.DeptServiceImpl.delete(java.lang.Integer))")

    //使用*代替包名(一层包一个*)
    //@Pointcut("execution(* com.aop.*.*.DeptServiceImpl.delete(java.lang.Integer))")

    //省略多个包名
    //@Pointcut("execution(* com..DeptServiceImpl.delete(java.lang.Integer))")

    //使用*代替类名 任意类
    //@Pointcut("execution(* com..*.delete(java.lang.Integer))")

    //使用*代替方法（*任意的方法）
    //@Pointcut("execution(* com..*.*(java.lang.Integer))")

    //*代替参数 （*代表的是一个参数 任意类型的）
//    @Pointcut("execution(* com.aop.service.impl.DeptServiceImpl.delete(*))")

    //..省略参数
    //@Pointcut("execution(* com.aop.service.impl.DeptServiceImpl.delete(..))")
//    @Pointcut("execution(* com..*.*(..))")

    //切入点表达式表示：service.impl包下的所有类所有方法都要加入AOP操作
//    @Pointcut("execution(* com.aop.service.impl.*.*(..))")


    //切入点表示要匹配service.impl下的DeptServiceImpl中的delte和list方法
//    @Pointcut("execution(* com.aop.service.impl.DeptServiceImpl.list(..)) || execution(* com.aop.service.impl.DeptServiceImpl.delete(..))")





    public void pt(){}

    @Before("pt()")
    public void before(){
        log.info("before..");
    }


}
